#include "fonctions.h"

int alarme = 0;

void maFin() {
	alarme = 1;
}

int main (int argc, char *argv[])
{
	int sd = 0, cnxsd = 0;
	//int opt_val = 1;
	socklen_t addr_len = sizeof (struct sockaddr_in);
	struct sockaddr_in addr;
	//struct sockaddr_in server_addr;
	char buffer[1000];

	signal(SIGALRM, maFin);

	if (argc < 2){
		printf("Pas assez d'arguments - > serveur.c [Serveur Port] \n");
		return -1;
	}

	modifierEtatTCP(CLOSED);

	//printf("Création du serveur en écoute sur le port : %s\n", argv[1]);
	sd = creerSocket("0", atoi(argv[1]));
	
	while(alarme == 0) {
		alarm(5);
		printf("Attente d'une connexion ...\n");

		if ((cnxsd = MonAccept(sd, (struct sockaddr *)&addr, &addr_len)) == -1) { 
			perror("MonAccept() error"); 
			//continue; 
		}
		else{
			printf("Connexion initialisee\n");
			signal(SIGALRM, SIG_IGN);
			modifierEtatTCP(ESTABLISHED);
			//printf("Fork serveur\n");

			afficherInfosConnexion();

			while(testEtatTCP() != CLOSED) {
				//printf("\nAppel de la fonction MonRead\n");
				MonRead(cnxsd, buffer, sizeof(buffer));
			}

			closeServeur(sd);
			printf("Fermeture de la connexion\n******************************************\n\n");
			signal(SIGALRM, maFin);
			alarm(5);
		}
	}
	return 0;
}